package com.example.proxy.service.impl;

import com.example.proxy.service.OrderService;

/**
 * ClassName:OrderServiceProxy
 * Package:com.example.proxy.service.impl
 * Description:
 *
 * @Author:ZhangXin
 * @Create:2023/5/10-14:54
 * @Version:v1.0
 */
//代理对象(代理对象和目标对象要具有相同的行为,就要实现同一个或同一些接口)
//客户端在使用代理对象时就像在使用目标对象
public class OrderServiceProxy implements OrderService {

    //将目标对象作为代理对象的一个属性,这种关系叫做关联关系,比继承关系的耦合度低
    private OrderService target;

    //创建代理对象的时候,传一个目标对象给代理对象
    public OrderServiceProxy(OrderService target) {
        this.target = target;
    }

    @Override
    public void generate() {//代理方法
        long begin = System.currentTimeMillis();
        //调用目标对象,目标方法
        target.generate();
        long end = System.currentTimeMillis();
        System.out.println("耗时" + (end - begin) + "毫秒");
    }

    @Override
    public void modify() {
        long begin = System.currentTimeMillis();
        target.modify();
        long end = System.currentTimeMillis();
        System.out.println("耗时" + (end - begin) + "毫秒");
    }

    @Override
    public void detail() {
        long begin = System.currentTimeMillis();
        target.detail();
        long end = System.currentTimeMillis();
        System.out.println("耗时" + (end - begin) + "毫秒");
    }
}
